#PWD = "shell pwd"
CC := gcc		
#shell pwd是比较好一点的
INC_DIR := $(shell pwd)/inc/
SRC_DIR := $(shell pwd)/src/
OBJ_DIR := $(shell pwd)/obj/
BIN_DIR := $(shell pwd)/bin/
LIB_DIR := $(shell pwd)/lib/

#目标文件名
TARGET  := $(BIN_DIR)/main


CFLAGS := -g
CFLAGS += -Wall
CFLAGS += -D_FORTIFY_SOURCE=2




#patsubst 是替换通配符，会把第一个%.c替换成第二个参数的%.c，
#wildcard 是把指定目录 $(SRC_DIR)下面的.c文件全部展开（带目录名）
#notdir 是把展开的文件去掉路径信息
#以下这句话就是找到SRC_DIR目录下的.c文件
SOURCES := $(patsubst %.c,%.c,$(notdir $(wildcard $(SRC_DIR)/*.c))) \

src_c =  $(wildcard $(SRC_DIR)/*.c) 
dir_c =  $(notdir $(src_c)) 
obj_c = $(patsubst %.c,%.c, $(dir_c))

#all: 
#	@echo $(SOURCES)
#	@echo $(src_c)
#	@echo $(dir_c)
#	@echo $(obj_c)

#make all的结果是
#main.c
#/home/svauto/c_programming_100_example/1_day/src//main.c
#main.c
#main.c



#$(SRCS:.c=.o) 变量替换函数，把所有的*.c文件替换为*.o文件。该函数和
#$(patsubst %.c,%.o,$(SRCS))具有相同效果。
#addprefix就是把main.c变成main.o
OBJECTS := $(addprefix $(OBJ_DIR)/, $(SOURCES:.c=.o))


.PHONY : clean all

$(TARGET) : $(OBJECTS)
	@mkdir -p  $(LIB_DIR) $(BIN_DIR) 2> /dev/null
	@$(CC) $(CFLAGS)  -o $@ $(OBJECTS)
$(OBJECTS) : $(OBJ_DIR)/%.o : $(SRC_DIR)/%.c
	@mkdir -p $(OBJ_DIR) 2> /dev/null
	@$(CC) -c $(CFLAGS) $< -o $@

all: 
	@echo $(SOURCES)
	@echo $(src_c)
	@echo $(dir_c)
	@echo $(obj_c)
	@echo $(OBJECTS)

clean:
	rm -f $(OBJECTS) $(TARGET)
	rm -rf ${BIN_DIR} ${OBJ_DIR}



